#include<stdio.h>
#include<iostream>
using namespace std;
//位运算,假设最低位为第0位
// 1:翻转某一位
int ReverseBit(int x,int n)  
{
    return x ^ (1<<(n-1));
}
// 2:某一位由0->1
int ZeroToOne(int x,int n)
{
    return x |(1<<(n-1));
}
// 3:某一位由1->0
int OneToZero(int x,int n)
{
    int bit = ~(1<<(n-1));
    return x & bit;
}
// 4:求二进制序列1的个数
int CountBitOne(int x)
{
    int count = 0;
    while(x)
    {
        x &= (x-1);
        count++;
    }
    return count;
}
// 5:求二进制序列0的个数
int CountBitZero(int x)
{
    int count = 0;
    while(x != -1)
    {
        x |= (x+1);
        count++;
    }
    return count;
}
// 6:打印二进制序列的奇数位和偶数位
void PrintBit_OddEven(int n)
{
    printf("奇数位: ");
    for(int i = 31;i>=1;i-=2) //[1,31] 
        printf("%d ",1&(n>>i));
    printf("\n");

    printf("偶数位: ");
    for(int i = 30;i>=0;i-=2) //[0,30]
        printf("%d ",1&(n>>i));
}
//6.1打印二进制序列
void PrintBit(int n)
{
    cout << endl;
    for(int i =31;i>=0;i--)
        printf("%d ",1&(n>>i));
    printf("\n");
}
// 8:判断是否为2的次方数
bool isPowTwo(int n)
{
    return (n&(n-1)) == 0 && n > 0;
}
int main()
{
    // int n = 0;
    // while(cin >> n)
    // {        
    //     cout << isPowTwo(n) << endl;
    //     PrintBit(n);
    //     cout <<"输入位: " ;
    //     int tmp = 0;
    //     cin >> tmp;
    //     int ans = OneToZero(n,tmp);
    //     PrintBit(ans);
    //     cout <<CountBitZero(ans) << endl;
    //     cout << CountBitOne(ans) << endl;
    // }


    // int a,b;
    // cin >> a >> b;
    // cout << a << " "<< b << endl;

    // // int c = a + b;
    // // a = c - a;
    // // b = c - a;
    // a = a ^ b;
    // b = a ^ b;
    // a = a ^ b;
    // cout << a << " " << b << endl;
    return 0;
}
